package org.example.jvm;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * 配置为-Xmx300m -XX:+UseParallelGC
 * （JVM堆为300MB，GC算法为ParallelGC）
 * <p>
 * OutOfMemoryError是java.lang.VirtualMachineError的子类，当JVM资源利用出现问题时抛出，
 * 更具体地说，这个错误是由于JVM花费太长时间执行GC且只能回收很少的堆内存时抛出的。
 * 根据Oracle官方文档，默认情况下，如果Java进程花费98%以上的时间执行GC，并且每次只有不到2%的堆被恢复，则JVM抛出此错误。
 * 换句话说，这意味着我们的应用程序几乎耗尽了所有可用内存，垃圾收集器花了太长时间试图清理它，并多次失败。
 * <p>
 * 在这种情况下，用户会体验到应用程序响应非常缓慢，通常只需要几毫秒就能完成的某些操作，
 * 此时则需要更长的时间来完成，这是因为所有的CPU正在进行垃圾收集，因此无法执行其他任务。
 *
 * @author kyle
 * @version 1.00.00
 * @updateUser [Kyle]
 * @updateRemark [说明本次修改内容]
 * @date [2020-12-03 12:35]
 * @since [2020-12-03 12:35]
 */
public class OutOfMemoryGCLimitExceed {

    public static void addRandomDataToMap() {
        Map<Integer, String> dataMap = new HashMap<>();
        Random r = new Random();
        while (true) {
            dataMap.put(r.nextInt(), String.valueOf(r.nextInt()));
        }
    }

    public static void main(String[] args) {
        addRandomDataToMap();
    }

}